package com.dragon.design.pattern.creational.singleton;

/**
 * 静态内部类的单例设计模式, 基于类的初始化的延迟加载解决方案
 *
 * @author dragon
 * @version V1.0.0-RELEASE
 * @date 2019/5/15 21:00
 */
public class StaticInnerClassSingleton {

    private StaticInnerClassSingleton() {
        if (InnerClass.staticInnerClassSingleton != null) {
            throw new RuntimeException("单例构造器禁止反射调用");
        }
    }

    /**
     * 静态内部类也叫作静态嵌套类,不依赖于外部类,可以访问外部类的静态成员变量,但是不能访问外部类的非成员变量
     * 作用:只是为了降低包的深度，方便类的使用，静态内部类适用于包含类当中，但又不依赖与外在的类，
     * 不用使用外在类的非静态属性和方法，只是为了方便管理类结构而定义。在创建静态内部类的时候，不需要外部类对象的引用。
     */
    private static class InnerClass {
        private static StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();
    }

    public static StaticInnerClassSingleton getInstance() {
        return InnerClass.staticInnerClassSingleton;
    }
}
